package com.wangdao.wechatmall.controller.admin;

import com.wangdao.wechatmall.bean.bo.admin.PermissionBO;
import com.wangdao.wechatmall.bean.bo.admin.RoleBO;
import com.wangdao.wechatmall.bean.bo.admin.RoleParamBO;
import com.wangdao.wechatmall.bean.pojo.Permission;
import com.wangdao.wechatmall.bean.pojo.Role;
import com.wangdao.wechatmall.bean.vo.admin.*;
import com.wangdao.wechatmall.bean.vo.admin.BaseRespVo;
import com.wangdao.wechatmall.exception.RoleDuplicatedException;
import com.wangdao.wechatmall.exception.RoleEmptyException;
import com.wangdao.wechatmall.service.admin.LogService;
import com.wangdao.wechatmall.service.admin.RoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @ClassName: RoleController
 * @Description 角色类
 * @Author Xinhao Yi
 * @Date 2021/7/9  1:40
 */
@RestController
@RequestMapping("admin/role")
public class RoleController {

    @Autowired
    RoleService roleService;

    @Autowired
    LogService logService;

    //请求 URL: http://localhost:8083/admin/role/options
    //响应负载：{"errno":0,"data":[{"value":1,"label":"超级管理员"},{"value":2,"label":"商场管理员"},{"value":3,"label":"推广管理员"},{"value":10,"label":"首页管理员"},{"value":11,"label":"TestAdmin"}],"errmsg":"成功"}
    @RequestMapping("/options")
    public BaseRespVo options(){
        List<RoleVO> roleVOList = roleService.queryRole();
        return BaseRespVo.ok(roleVOList);
    }

    //请求 URL: http://localhost:8083/admin/role/list?page=1&limit=20&sort=add_time&order=desc
    //请求 URL: http://localhost:8083/admin/role/list?page=1&limit=20&name=%E9%94%80%E5%94%AE&sort=add_time&order=desc
    //响应负载：{"errno":0,"data":{"total":11,"items":[{"id":37,"name":"后勤管理员","desc":"保安大队","enabled":true,"addTime":"2021-07-09 20:13:21","updateTime":"2021-07-09 20:13:21","deleted":false}]},"errmsg":"成功"}
    @RequestMapping("/list")
    public BaseRespVo list(RoleParamBO param){
        RoleDataVO roleDataVO = roleService.queryRole(param);
        //增加到日志中
//todo
//        String admin = null;
//        String ip = null;
//        String action = "查找管理员";
//        Boolean status = true;
//        //插入到日志中
//        logService.addLog(admin,ip,action,status);
        return BaseRespVo.ok(roleDataVO);
    }

    //请求 URL: http://182.92.235.201:8083/admin/role/create
    //请求载体：{"name":"测试用角色","desc":"测试说明"}
    //响应载体：{"errno":0,"data":{"id":42,"name":"测试用角色","desc":"测试说明","addTime":"2021-07-09 21:47:13","updateTime":"2021-07-09 21:47:13"},"errmsg":"成功"}
//    {
//        "id": 42,
//            "name": "测试用角色",
//            "desc": "测试说明",
//            "addTime": "2021-07-09 21:47:13",
//            "updateTime": "2021-07-09 21:47:13"
//    }

    /**
     * 创建角色
     * @param param
     * @return
     * @throws RoleEmptyException
     * @throws RoleDuplicatedException
     */
    @RequestMapping("/create")
    public BaseRespVo create(@RequestBody RoleBO param) throws RoleEmptyException, RoleDuplicatedException {
        Role roleVO = roleService.create(param);
        //增加到日志中
//todo
//        String admin = null;
//        String ip = null;
//        String action = "添加管理员";
//        Boolean status = null;
//        //插入到日志中
//        logService.addLog(admin,ip,action,status);
        return BaseRespVo.ok(roleVO);
    }

    //请求 URL: http://182.92.235.201:8083/admin/role/update
    //请求负载：
//    {
//        "id": 42,
//            "name": "测试用角色",
//            "desc": "修改说明",
//            "enabled": true,
//            "addTime": "2021-07-09 21:47:14",
//            "updateTime": "2021-07-09 21:47:14",
//            "deleted": false
//    }
    //响应负载：{"errno":0,"errmsg":"成功"}

    /**
     * 更新角色
     * @param param
     * @return
     * @throws RoleEmptyException
     */
    @PostMapping("/update")
    public BaseRespVo update(@RequestBody Role param) throws RoleEmptyException {
        Integer update = roleService.update(param);
        if (update == 1){
            //增加到日志中
//todo
//        String admin = null;
//        String ip = null;
//        String action = "修改管理员";
//        Boolean status = true;
//        //插入到日志中
//        logService.addLog(admin,ip,action,status);
            return BaseRespVo.ok(null,"修改成功");
        }
        else{
            //增加到日志中
//todo
//        String admin = null;
//        String ip = null;
//        String action = "修改管理员";
//        Boolean status = false;
//        //插入到日志中
//        logService.addLog(admin,ip,action,status);
            return BaseRespVo.fail("修改失败");
        }
    }

    //请求 URL: http://182.92.235.201:8083/admin/role/delete
    //请求负载：
//    {
//        "id": 43,
//            "name": "嘻嘻嘻",
//            "desc": "我的",
//            "addTime": "2021-07-09 22:50:44",
//            "updateTime": "2021-07-09 22:50:44"
//    }
    //响应负载:{"errno":0,"errmsg":"成功"}
    //响应负载：{"errno":642,"errmsg":"当前角色存在管理员，不能删除"}

    /**
     * 删除角色
     * @param param
     * @return
     */
    @PostMapping("/delete")
    public BaseRespVo delete(@RequestBody Role param){
        Boolean ifDelete = roleService.delete(param);
        if (ifDelete){
            return BaseRespVo.ok(null,"删除成功");
            //增加到日志中
//todo
//        String admin = null;
//        String ip = null;
//        String action = "删除管理员";
//        Boolean status = true;
//        //插入到日志中
//        logService.addLog(admin,ip,action,status);
        }
        else {
            BaseRespVo<Object> fail = new com.wangdao.wechatmall.bean.vo.admin.BaseRespVo<>();
            fail.setErrno(642);
            fail.setErrmsg("当前角色存在管理员，不能删除");
            //增加到日志中
//todo
//        String admin = null;
//        String ip = null;
//        String action = "删除管理员";
//        Boolean status = false;
//        //插入到日志中
//        logService.addLog(admin,ip,action,status);
            return fail;
        }
    }

    //请求 URL: http://182.92.235.201:8083/admin/role/permissions?roleId=42
    //请求负载：roleId: 42
    //响应负载：{"errno":0,"data":{"systemPermissions":[{"id":"系统管理","label":"系统管理","children":[{"id":"管理员管理","label":"管理员管理","children":[{"id":"admin:admin:update","label":"编辑","api":"POST /admin/admin/update"},{"id":"admin:admin:list","label":"查询","api":"GET /admin/admin/list"},{"id":"admin:admin:read","label":"详情","api":"GET /admin/admin/read"},{"id":"admin:admin:delete","label":"删除","api":"POST /admin/admin/delete"},{"id":"admin:admin:create","label":"添加","api":"POST /admin/admin/create"}]},{"id":"角色管理","label":"角色管理","children":[{"id":"admin:role:permission:update","label":"权限变更","api":"POST /admin/role/permissions"},{"id":"admin:role:update","label":"角色编辑","api":"POST /admin/role/update"},{"id":"admin:role:list","label":"角色查询","api":"GET /admin/role/list"},{"id":"admin:role:read","label":"角色详情","api":"GET /admin/role/read"},{"id":"admin:role:delete","label":"角色删除","api":"POST /admin/role/delete"},{"id":"admin:role:permission:get","label":"权限详情","api":"GET /admin/role/permissions"},{"id":"admin:role:create","label":"角色添加","api":"POST /admin/role/create"}]},{"id":"对象存储","label":"对象存储","children":[{"id":"admin:storage:update","label":"编辑","api":"POST /admin/storage/update"},{"id":"admin:storage:list","label":"查询","api":"GET /admin/storage/list"},{"id":"admin:storage:read","label":"详情","api":"POST /admin/storage/read"},{"id":"admin:storage:delete","label":"删除","api":"POST /admin/storage/delete"},{"id":"admin:storage:create","label":"上传","api":"POST /admin/storage/create"}]},{"id":"操作日志","label":"操作日志","children":[{"id":"admin:log:list","label":"查询","api":"GET /admin/log/list"}]}]},{"id":"商场管理","label":"商场管理","children":[{"id":"品牌管理","label":"品牌管理","children":[{"id":"admin:brand:update","label":"编辑","api":"POST /admin/brand/update"},{"id":"admin:brand:list","label":"查询","api":"GET /admin/brand/list"},{"id":"admin:brand:read","label":"详情","api":"GET /admin/brand/read"},{"id":"admin:brand:delete","label":"删除","api":"POST /admin/brand/delete"},{"id":"admin:brand:create","label":"添加","api":"POST /admin/brand/create"}]},{"id":"通用问题","label":"通用问题","children":[{"id":"admin:issue:update","label":"编辑","api":"POST /admin/issue/update"},{"id":"admin:issue:list","label":"查询","api":"GET /admin/issue/list"},{"id":"admin:issue:delete","label":"删除","api":"POST /admin/issue/delete"},{"id":"admin:issue:create","label":"添加","api":"POST /admin/issue/create"}]},{"id":"订单管理","label":"订单管理","children":[{"id":"admin:order:read","label":"详情","api":"GET /admin/order/detail"},{"id":"admin:order:ship","label":"订单发货","api":"POST /admin/order/ship"},{"id":"admin:order:refund","label":"订单退款","api":"POST /admin/order/refund"},{"id":"admin:order:reply","label":"订单商品回复","api":"POST /admin/order/reply"},{"id":"admin:order:list","label":"查询","api":"GET /admin/order/list"}]},{"id":"类目管理","label":"类目管理","children":[{"id":"admin:category:update","label":"编辑","api":"POST /admin/category/update"},{"id":"admin:category:list","label":"查询","api":"GET /admin/category/list"},{"id":"admin:category:read","label":"详情","api":"GET /admin/category/read"},{"id":"admin:category:delete","label":"删除","api":"POST /admin/category/delete"},{"id":"admin:category:create","label":"添加","api":"POST /admin/category/create"}]},{"id":"关键词","label":"关键词","children":[{"id":"admin:keyword:update","label":"编辑","api":"POST /admin/keyword/update"},{"id":"admin:keyword:list","label":"查询","api":"GET /admin/keyword/list"},{"id":"admin:keyword:read","label":"详情","api":"GET /admin/keyword/read"},{"id":"admin:keyword:delete","label":"删除","api":"POST /admin/keyword/delete"},{"id":"admin:keyword:create","label":"添加","api":"POST /admin/keyword/create"}]}]},{"id":"用户管理","label":"用户管理","children":[{"id":"用户收藏","label":"用户收藏","children":[{"id":"admin:collect:list","label":"查询","api":"GET /admin/collect/list"}]},{"id":"用户足迹","label":"用户足迹","children":[{"id":"admin:footprint:list","label":"查询","api":"GET /admin/footprint/list"}]},{"id":"意见反馈","label":"意见反馈","children":[{"id":"admin:feedback:list","label":"查询","api":"GET /admin/feedback/list"}]},{"id":"搜索历史","label":"搜索历史","children":[{"id":"admin:history:list","label":"查询","api":"GET /admin/history/list"}]},{"id":"会员管理","label":"会员管理","children":[{"id":"admin:user:list","label":"查询","api":"GET /admin/user/list"}]},{"id":"收货地址","label":"收货地址","children":[{"id":"admin:address:list","label":"查询","api":"GET /admin/address/list"}]}]},{"id":"配置管理","label":"配置管理","children":[{"id":"小程序配置","label":"小程序配置","children":[{"id":"admin:config:wx:list","label":"详情","api":"GET /admin/config/wx"},{"id":"admin:config:wx:updateConfigs","label":"编辑","api":"POST /admin/config/wx"}]},{"id":"运费配置","label":"运费配置","children":[{"id":"admin:config:express:list","label":"详情","api":"GET /admin/config/express"},{"id":"admin:config:express:updateConfigs","label":"编辑","api":"POST /admin/config/express"}]},{"id":"商场配置","label":"商场配置","children":[{"id":"admin:config:mall:list","label":"详情","api":"GET /admin/config/mall"},{"id":"admin:config:mall:updateConfigs","label":"编辑","api":"POST /admin/config/mall"}]},{"id":"订单配置","label":"订单配置","children":[{"id":"admin:config:order:list","label":"详情","api":"GET /admin/config/order"},{"id":"admin:config:order:updateConfigs","label":"编辑","api":"POST /admin/config/order"}]}]},{"id":"推广管理","label":"推广管理","children":[{"id":"广告管理","label":"广告管理","children":[{"id":"admin:ad:update","label":"编辑","api":"POST /admin/ad/update"},{"id":"admin:ad:list","label":"查询","api":"GET /admin/ad/list"},{"id":"admin:ad:read","label":"详情","api":"GET /admin/ad/read"},{"id":"admin:ad:delete","label":"删除","api":"POST /admin/ad/delete"},{"id":"admin:ad:create","label":"添加","api":"POST /admin/ad/create"}]},{"id":"专题管理","label":"专题管理","children":[{"id":"admin:topic:update","label":"编辑","api":"POST /admin/topic/update"},{"id":"admin:topic:list","label":"查询","api":"GET /admin/topic/list"},{"id":"admin:topic:read","label":"详情","api":"GET /admin/topic/read"},{"id":"admin:topic:delete","label":"删除","api":"POST /admin/topic/delete"},{"id":"admin:topic:create","label":"添加","api":"POST /admin/topic/create"}]},{"id":"优惠券管理","label":"优惠券管理","children":[{"id":"admin:coupon:listuser","label":"查询用户","api":"GET /admin/coupon/listuser"},{"id":"admin:coupon:update","label":"编辑","api":"POST /admin/coupon/update"},{"id":"admin:coupon:list","label":"查询","api":"GET /admin/coupon/list"},{"id":"admin:coupon:read","label":"详情","api":"GET /admin/coupon/read"},{"id":"admin:coupon:delete","label":"删除","api":"POST /admin/coupon/delete"},{"id":"admin:coupon:create","label":"添加","api":"POST /admin/coupon/create"}]},{"id":"团购管理","label":"团购管理","children":[{"id":"admin:groupon:read","label":"详情","api":"GET /admin/groupon/listRecord"},{"id":"admin:groupon:update","label":"编辑","api":"POST /admin/groupon/update"},{"id":"admin:groupon:list","label":"查询","api":"GET /admin/groupon/list"},{"id":"admin:groupon:delete","label":"删除","api":"POST /admin/groupon/delete"},{"id":"admin:groupon:create","label":"添加","api":"POST /admin/groupon/create"}]}]},{"id":"商品管理","label":"商品管理","children":[{"id":"商品管理","label":"商品管理","children":[{"id":"admin:goods:read","label":"详情","api":"GET /admin/goods/detail"},{"id":"admin:goods:update","label":"编辑","api":"POST /admin/goods/update"},{"id":"admin:goods:list","label":"查询","api":"GET /admin/goods/list"},{"id":"admin:goods:delete","label":"删除","api":"POST /admin/goods/delete"},{"id":"admin:goods:create","label":"上架","api":"POST /admin/goods/create"}]},{"id":"评论管理","label":"评论管理","children":[{"id":"admin:comment:list","label":"查询","api":"GET /admin/comment/list"},{"id":"admin:comment:delete","label":"删除","api":"POST /admin/comment/delete"}]}]},{"id":"其他","label":"其他","children":[{"id":"权限测试","label":"权限测试","children":[{"id":"index:permission:write","label":"权限写","api":"POST /admin/index/write"},{"id":"index:permission:read","label":"权限读","api":"GET /admin/index/read"}]}]},{"id":"统计管理","label":"统计管理","children":[{"id":"用户统计","label":"用户统计","children":[{"id":"admin:stat:user","label":"查询","api":"GET /admin/stat/user"}]},{"id":"订单统计","label":"订单统计","children":[{"id":"admin:stat:order","label":"查询","api":"GET /admin/stat/order"}]},{"id":"商品统计","label":"商品统计","children":[{"id":"admin:stat:goods","label":"查询","api":"GET /admin/stat/goods"}]}]}],"assignedPermissions":["admin:stat:goods","admin:comment:list","admin:stat:user","admin:goods:list","admin:goods:update","index:permission:read","index:permission:write","admin:comment:delete","admin:goods:read","admin:goods:delete","admin:goods:create","admin:stat:order"]},"errmsg":"成功"}

    /**
     * 查找该角色的全部permissions权限，并且格式化输出
     * @param param
     * @return
     */
    @GetMapping("/permissions")
    public BaseRespVo permissionsGet(Permission param){
        PermissionVO permissionVO = roleService.queryPermissionsGet(param);
        return BaseRespVo.ok(permissionVO);
    }

    /**
     * 提交api到指定的角色中
     * @param param
     * @return
     */
    @PostMapping("/permissions")
    public BaseRespVo permissionsPost(@RequestBody PermissionBO param){
        Integer update = roleService.queryPermissionsPost(param);
        if (update == 200) {
            return BaseRespVo.ok();
        }
        else if (update == 404){
            return BaseRespVo.fail("系统默认的超级管理员不允许修改");
        }
        else if (update == 405){
            return BaseRespVo.fail("可用api为0条，请您检查存放api指令的文件或数据库");
        }
        else{
            return BaseRespVo.fail("其他错误");
        }
    }

}
